#include <string>
#include <cmath>
#include "constants.h"
#include "orbitvirtualmachine.h"

void OVMBin2::nextCompiledStep()
{   m_index = 0;
    m_index = 1;
    sCopy( 0, 400);
    m_index = 2;
    m_index = 3;
    m_index = 4;
    sCopy( 0, 379);
    m_index = 5;
    dSub( 4, 3);
    m_index = 6;
    sCmpz( 2, 5);
    m_index = 7;
    dPhi( 2, 1);
    m_index = 8;
    dSub( 7, 0);
    m_index = 9;
    sCopy( 0, 398);
    m_index = 10;
    sCmpz( 2, 5);
    m_index = 11;
    dPhi( 0, 9);
    m_index = 12;
    dSub( 11, 0);
    m_index = 13;
    sCmpz( 2, 12);
    m_index = 14;
    dPhi( 8, 7);
    m_index = 15;
    m_index = 16;
    sCopy( 0, 399);
    m_index = 17;
    m_index = 18;
    sCmpz( 2, 5);
    m_index = 19;
    dPhi( 17, 16);
    m_index = 20;
    dMult( 19, 15);
    m_index = 21;
    sCmpz( 2, 12);
    m_index = 22;
    dPhi( 20, 19);
    m_index = 23;
    sCmpz( 2, 12);
    m_index = 24;
    dPhi( 19, 12);
    m_index = 25;
    sCopy( 0, 396);
    m_index = 26;
    sCopy( 0, 391);
    m_index = 27;
    m_index = 28;
    m_index = 29;
    m_index = 30;
    sInput( 0, 16000);
    m_index = 31;
    dSub( 30, 29);
    m_index = 32;
    sCmpz( 2, 31);
    m_index = 33;
    dPhi( 28, 3);
    m_index = 34;
    m_index = 35;
    dSub( 30, 34);
    m_index = 36;
    sCmpz( 2, 35);
    m_index = 37;
    dPhi( 27, 33);
    m_index = 38;
    m_index = 39;
    m_index = 40;
    dSub( 30, 39);
    m_index = 41;
    sCmpz( 2, 40);
    m_index = 42;
    dPhi( 38, 37);
    m_index = 43;
    m_index = 44;
    dSub( 30, 43);
    m_index = 45;
    sCmpz( 2, 44);
    m_index = 46;
    dPhi( 27, 42);
    m_index = 47;
    sCmpz( 2, 5);
    m_index = 48;
    dPhi( 46, 26);
    m_index = 49;
    sCopy( 0, 381);
    m_index = 50;
    sCmpz( 2, 5);
    m_index = 51;
    dPhi( 3, 49);
    m_index = 52;
    dSub( 51, 48);
    m_index = 53;
    dMult( 52, 52);
    m_index = 54;
    sCopy( 0, 390);
    m_index = 55;
    sCmpz( 2, 31);
    m_index = 56;
    dPhi( 27, 3);
    m_index = 57;
    m_index = 58;
    sCmpz( 2, 35);
    m_index = 59;
    dPhi( 57, 56);
    m_index = 60;
    m_index = 61;
    sCmpz( 2, 40);
    m_index = 62;
    dPhi( 60, 59);
    m_index = 63;
    sCmpz( 2, 44);
    m_index = 64;
    dPhi( 28, 62);
    m_index = 65;
    sCmpz( 2, 5);
    m_index = 66;
    dPhi( 64, 54);
    m_index = 67;
    sCopy( 0, 380);
    m_index = 68;
    sCmpz( 2, 5);
    m_index = 69;
    dPhi( 3, 67);
    m_index = 70;
    dSub( 69, 66);
    m_index = 71;
    dMult( 70, 70);
    m_index = 72;
    dAdd( 71, 53);
    m_index = 73;
    sSqrt( 0, 72);
    m_index = 74;
    dMult( 73, 73);
    m_index = 75;
    dMult( 74, 73);
    m_index = 76;
    m_index = 77;
    sCopy( 0, 382);
    m_index = 78;
    m_index = 79;
    sCmpz( 2, 5);
    m_index = 80;
    dPhi( 78, 77);
    m_index = 81;
    dMult( 76, 80);
    m_index = 82;
    dDiv( 81, 75);
    m_index = 83;
    dMult( 52, 82);
    m_index = 84;
    dDiv( 0, 0);
    m_index = 85;
    dMult( 84, 84);
    m_index = 86;
    dDiv( 85, 15);
    m_index = 87;
    dMult( 83, 86);
    m_index = 88;
    sCopy( 0, 394);
    m_index = 89;
    m_index = 90;
    sCmpz( 2, 35);
    m_index = 91;
    dPhi( 89, 56);
    m_index = 92;
    m_index = 93;
    sCmpz( 2, 40);
    m_index = 94;
    dPhi( 92, 91);
    m_index = 95;
    m_index = 96;
    sCmpz( 2, 44);
    m_index = 97;
    dPhi( 95, 94);
    m_index = 98;
    sCmpz( 2, 5);
    m_index = 99;
    dPhi( 97, 88);
    m_index = 100;
    dMult( 99, 84);
    m_index = 101;
    dAdd( 48, 100);
    m_index = 102;
    dAdd( 101, 87);
    m_index = 103;
    sCopy( 0, 386);
    m_index = 104;
    m_index = 105;
    dAdd( 29, 17);
    m_index = 106;
    dSub( 30, 105);
    m_index = 107;
    sCmpz( 2, 106);
    m_index = 108;
    dPhi( 104, 3);
    m_index = 109;
    dAdd( 34, 17);
    m_index = 110;
    dSub( 30, 109);
    m_index = 111;
    sCmpz( 2, 110);
    m_index = 112;
    dPhi( 27, 108);
    m_index = 113;
    dAdd( 39, 17);
    m_index = 114;
    dSub( 30, 113);
    m_index = 115;
    sCmpz( 2, 114);
    m_index = 116;
    dPhi( 38, 112);
    m_index = 117;
    dAdd( 43, 17);
    m_index = 118;
    dSub( 30, 117);
    m_index = 119;
    sCmpz( 2, 118);
    m_index = 120;
    dPhi( 27, 116);
    m_index = 121;
    sCmpz( 2, 31);
    m_index = 122;
    dPhi( 104, 120);
    m_index = 123;
    sCmpz( 2, 35);
    m_index = 124;
    dPhi( 27, 122);
    m_index = 125;
    sCmpz( 2, 40);
    m_index = 126;
    dPhi( 38, 124);
    m_index = 127;
    sCmpz( 2, 44);
    m_index = 128;
    dPhi( 27, 126);
    m_index = 129;
    sCmpz( 2, 5);
    m_index = 130;
    dPhi( 128, 103);
    m_index = 131;
    dSub( 51, 130);
    m_index = 132;
    dMult( 131, 131);
    m_index = 133;
    sCopy( 0, 385);
    m_index = 134;
    sCmpz( 2, 106);
    m_index = 135;
    dPhi( 27, 3);
    m_index = 136;
    sCmpz( 2, 110);
    m_index = 137;
    dPhi( 28, 135);
    m_index = 138;
    m_index = 139;
    sCmpz( 2, 114);
    m_index = 140;
    dPhi( 138, 137);
    m_index = 141;
    m_index = 142;
    sCmpz( 2, 118);
    m_index = 143;
    dPhi( 141, 140);
    m_index = 144;
    sCmpz( 2, 31);
    m_index = 145;
    dPhi( 27, 143);
    m_index = 146;
    sCmpz( 2, 35);
    m_index = 147;
    dPhi( 28, 145);
    m_index = 148;
    sCmpz( 2, 40);
    m_index = 149;
    dPhi( 138, 147);
    m_index = 150;
    sCmpz( 2, 44);
    m_index = 151;
    dPhi( 141, 149);
    m_index = 152;
    sCmpz( 2, 5);
    m_index = 153;
    dPhi( 151, 133);
    m_index = 154;
    dSub( 69, 153);
    m_index = 155;
    dMult( 154, 154);
    m_index = 156;
    dAdd( 155, 132);
    m_index = 157;
    sSqrt( 0, 156);
    m_index = 158;
    dMult( 157, 157);
    m_index = 159;
    dMult( 158, 157);
    m_index = 160;
    dDiv( 81, 159);
    m_index = 161;
    dMult( 131, 160);
    m_index = 162;
    sInput( 0, 3);
    m_index = 163;
    dDiv( 162, 84);
    m_index = 164;
    dAdd( 163, 161);
    m_index = 165;
    dMult( 164, 86);
    m_index = 166;
    sCopy( 0, 389);
    m_index = 167;
    sCmpz( 2, 110);
    m_index = 168;
    dPhi( 95, 135);
    m_index = 169;
    m_index = 170;
    sCmpz( 2, 114);
    m_index = 171;
    dPhi( 169, 168);
    m_index = 172;
    m_index = 173;
    sCmpz( 2, 118);
    m_index = 174;
    dPhi( 172, 171);
    m_index = 175;
    sCmpz( 2, 31);
    m_index = 176;
    dPhi( 27, 174);
    m_index = 177;
    sCmpz( 2, 35);
    m_index = 178;
    dPhi( 95, 176);
    m_index = 179;
    sCmpz( 2, 40);
    m_index = 180;
    dPhi( 169, 178);
    m_index = 181;
    sCmpz( 2, 44);
    m_index = 182;
    dPhi( 172, 180);
    m_index = 183;
    sCmpz( 2, 5);
    m_index = 184;
    dPhi( 182, 166);
    m_index = 185;
    dMult( 184, 84);
    m_index = 186;
    dAdd( 130, 185);
    m_index = 187;
    dAdd( 186, 165);
    m_index = 188;
    dSub( 187, 102);
    m_index = 189;
    dMult( 188, 188);
    m_index = 190;
    dMult( 70, 82);
    m_index = 191;
    dMult( 190, 86);
    m_index = 192;
    sCopy( 0, 393);
    m_index = 193;
    m_index = 194;
    sCmpz( 2, 31);
    m_index = 195;
    dPhi( 193, 3);
    m_index = 196;
    sCmpz( 2, 35);
    m_index = 197;
    dPhi( 27, 195);
    m_index = 198;
    m_index = 199;
    sCmpz( 2, 40);
    m_index = 200;
    dPhi( 198, 197);
    m_index = 201;
    sCmpz( 2, 44);
    m_index = 202;
    dPhi( 27, 200);
    m_index = 203;
    sCmpz( 2, 5);
    m_index = 204;
    dPhi( 202, 192);
    m_index = 205;
    dMult( 204, 84);
    m_index = 206;
    dAdd( 66, 205);
    m_index = 207;
    dAdd( 206, 191);
    m_index = 208;
    dMult( 154, 160);
    m_index = 209;
    sInput( 0, 2);
    m_index = 210;
    dDiv( 209, 84);
    m_index = 211;
    dAdd( 210, 208);
    m_index = 212;
    dMult( 211, 86);
    m_index = 213;
    sCopy( 0, 388);
    m_index = 214;
    m_index = 215;
    sCmpz( 2, 106);
    m_index = 216;
    dPhi( 214, 3);
    m_index = 217;
    sCmpz( 2, 110);
    m_index = 218;
    dPhi( 27, 216);
    m_index = 219;
    sCmpz( 2, 114);
    m_index = 220;
    dPhi( 169, 218);
    m_index = 221;
    sCmpz( 2, 118);
    m_index = 222;
    dPhi( 27, 220);
    m_index = 223;
    sCmpz( 2, 31);
    m_index = 224;
    dPhi( 214, 222);
    m_index = 225;
    sCmpz( 2, 35);
    m_index = 226;
    dPhi( 27, 224);
    m_index = 227;
    sCmpz( 2, 40);
    m_index = 228;
    dPhi( 169, 226);
    m_index = 229;
    sCmpz( 2, 44);
    m_index = 230;
    dPhi( 27, 228);
    m_index = 231;
    sCmpz( 2, 5);
    m_index = 232;
    dPhi( 230, 213);
    m_index = 233;
    dMult( 232, 84);
    m_index = 234;
    dAdd( 153, 233);
    m_index = 235;
    dAdd( 234, 212);
    m_index = 236;
    dSub( 235, 207);
    m_index = 237;
    dMult( 236, 236);
    m_index = 238;
    dAdd( 237, 189);
    m_index = 239;
    sSqrt( 0, 238);
    m_index = 240;
    dAdd( 25, 239);
    m_index = 241;
    dMult( 163, 163);
    m_index = 242;
    dMult( 210, 210);
    m_index = 243;
    dAdd( 242, 241);
    m_index = 244;
    sSqrt( 0, 243);
    m_index = 245;
    dSub( 244, 3);
    m_index = 246;
    sCmpz( 2, 245);
    m_index = 247;
    dPhi( 240, 3);
    m_index = 248;
    dSub( 239, 17);
    m_index = 249;
    sCmpz( 0, 248);
    m_index = 250;
    dPhi( 247, 3);
    m_index = 251;
    dSub( 51, 102);
    m_index = 252;
    dMult( 251, 251);
    m_index = 253;
    dSub( 69, 207);
    m_index = 254;
    dMult( 253, 253);
    m_index = 255;
    dAdd( 254, 252);
    m_index = 256;
    sSqrt( 0, 255);
    m_index = 257;
    dMult( 256, 256);
    m_index = 258;
    dMult( 257, 256);
    m_index = 259;
    dDiv( 81, 258);
    m_index = 260;
    dMult( 251, 259);
    m_index = 261;
    dAdd( 260, 83);
    m_index = 262;
    dDiv( 261, 15);
    m_index = 263;
    dMult( 262, 84);
    m_index = 264;
    dAdd( 99, 263);
    m_index = 265;
    dMult( 253, 259);
    m_index = 266;
    dAdd( 265, 190);
    m_index = 267;
    dDiv( 266, 15);
    m_index = 268;
    dMult( 267, 84);
    m_index = 269;
    dAdd( 204, 268);
    m_index = 270;
    sCopy( 0, 392);
    m_index = 271;
    m_index = 272;
    sCmpz( 2, 31);
    m_index = 273;
    dPhi( 271, 3);
    m_index = 274;
    sCmpz( 2, 35);
    m_index = 275;
    dPhi( 271, 273);
    m_index = 276;
    sCmpz( 2, 40);
    m_index = 277;
    dPhi( 271, 275);
    m_index = 278;
    sCmpz( 2, 44);
    m_index = 279;
    dPhi( 271, 277);
    m_index = 280;
    sCmpz( 2, 5);
    m_index = 281;
    dPhi( 279, 270);
    m_index = 282;
    dSub( 51, 187);
    m_index = 283;
    dMult( 282, 282);
    m_index = 284;
    dSub( 69, 235);
    m_index = 285;
    dMult( 284, 284);
    m_index = 286;
    dAdd( 285, 283);
    m_index = 287;
    sSqrt( 0, 286);
    m_index = 288;
    dMult( 287, 287);
    m_index = 289;
    dMult( 288, 287);
    m_index = 290;
    dDiv( 81, 289);
    m_index = 291;
    dMult( 282, 290);
    m_index = 292;
    dAdd( 291, 161);
    m_index = 293;
    dDiv( 292, 15);
    m_index = 294;
    dAdd( 163, 293);
    m_index = 295;
    dMult( 294, 84);
    m_index = 296;
    dAdd( 184, 295);
    m_index = 297;
    dMult( 284, 290);
    m_index = 298;
    dAdd( 297, 208);
    m_index = 299;
    dDiv( 298, 15);
    m_index = 300;
    dAdd( 210, 299);
    m_index = 301;
    dMult( 300, 84);
    m_index = 302;
    dAdd( 232, 301);
    m_index = 303;
    sCopy( 0, 387);
    m_index = 304;
    sCmpz( 2, 106);
    m_index = 305;
    dPhi( 271, 3);
    m_index = 306;
    sCmpz( 2, 110);
    m_index = 307;
    dPhi( 271, 305);
    m_index = 308;
    sCmpz( 2, 114);
    m_index = 309;
    dPhi( 271, 307);
    m_index = 310;
    sCmpz( 2, 118);
    m_index = 311;
    dPhi( 271, 309);
    m_index = 312;
    sCmpz( 2, 31);
    m_index = 313;
    dPhi( 271, 311);
    m_index = 314;
    sCmpz( 2, 35);
    m_index = 315;
    dPhi( 271, 313);
    m_index = 316;
    sCmpz( 2, 40);
    m_index = 317;
    dPhi( 271, 315);
    m_index = 318;
    sCmpz( 2, 44);
    m_index = 319;
    dPhi( 271, 317);
    m_index = 320;
    sCmpz( 2, 5);
    m_index = 321;
    dPhi( 319, 303);
    m_index = 322;
    sCopy( 0, 384);
    m_index = 323;
    sCmpz( 2, 5);
    m_index = 324;
    dPhi( 3, 322);
    m_index = 325;
    sCopy( 0, 383);
    m_index = 326;
    sCmpz( 2, 5);
    m_index = 327;
    dPhi( 3, 325);
    m_index = 328;
    dAdd( 4, 0);
    m_index = 329;
    dSub( 102, 187);
    m_index = 330;
    dSub( 207, 235);
    m_index = 331;
    sCopy( 0, 395);
    m_index = 332;
    dAdd( 331, 0);
    m_index = 333;
    sCmpz( 2, 245);
    m_index = 334;
    dPhi( 332, 3);
    m_index = 335;
    sCmpz( 0, 248);
    m_index = 336;
    dPhi( 334, 3);
    m_index = 337;
    sCopy( 0, 397);
    m_index = 338;
    m_index = 339;
    sCmpz( 2, 5);
    m_index = 340;
    dPhi( 338, 337);
    m_index = 341;
    dMult( 244, 84);
    m_index = 342;
    dSub( 340, 341);
    m_index = 343;
    m_index = 344;
    m_index = 345;
    dDiv( 342, 338);
    m_index = 346;
    dMult( 345, 344);
    m_index = 347;
    dAdd( 7, 346);
    m_index = 348;
    dAdd( 347, 343);
    m_index = 349;
    dMult( 348, 15);
    m_index = 350;
    m_index = 351;
    dDiv( 350, 84);
    m_index = 352;
    dSub( 351, 336);
    m_index = 353;
    sCmpz( 0, 352);
    m_index = 354;
    dPhi( 349, 3);
    m_index = 355;
    dSub( 342, 3);
    m_index = 356;
    dSub( 372, 0);
    m_index = 357;
    sCmpz( 0, 355);
    m_index = 358;
    dPhi( 356, 354);
    m_index = 359;
    dSub( 338, 341);
    m_index = 360;
    sCmpz( 0, 359);
    m_index = 361;
    dPhi( 356, 358);
    m_index = 362;
    m_index = 363;
    dSub( 187, 51);
    m_index = 364;
    dMult( 363, 363);
    m_index = 365;
    dSub( 235, 69);
    m_index = 366;
    dMult( 365, 365);
    m_index = 367;
    dAdd( 366, 364);
    m_index = 368;
    sSqrt( 0, 367);
    m_index = 369;
    dSub( 368, 362);
    m_index = 370;
    sCmpz( 0, 369);
    m_index = 371;
    dPhi( 356, 361);
    m_index = 372;
    m_index = 373;
    dOutput( 0, 371);
    m_index = 374;
    dOutput( 1, 342);
    m_index = 375;
    dOutput( 2, 284);
    m_index = 376;
    dOutput( 3, 282);
    m_index = 377;
    dOutput( 4, 330);
    m_index = 378;
    dOutput( 5, 329);
    m_index = 379;
    sCopy( 0, 328);
    m_index = 380;
    sCopy( 0, 69);
    m_index = 381;
    sCopy( 0, 51);
    m_index = 382;
    sCopy( 0, 80);
    m_index = 383;
    sCopy( 0, 327);
    m_index = 384;
    sCopy( 0, 324);
    m_index = 385;
    sCopy( 0, 235);
    m_index = 386;
    sCopy( 0, 187);
    m_index = 387;
    sCopy( 0, 321);
    m_index = 388;
    sCopy( 0, 302);
    m_index = 389;
    sCopy( 0, 296);
    m_index = 390;
    sCopy( 0, 207);
    m_index = 391;
    sCopy( 0, 102);
    m_index = 392;
    sCopy( 0, 281);
    m_index = 393;
    sCopy( 0, 269);
    m_index = 394;
    sCopy( 0, 264);
    m_index = 395;
    sCopy( 0, 336);
    m_index = 396;
    sCopy( 0, 250);
    m_index = 397;
    sCopy( 0, 342);
    m_index = 398;
    sCopy( 0, 24);
    m_index = 399;
    sCopy( 0, 22);
    m_index = 400;
    sCopy( 0, 14);
    statsOutput();
    m_count++;
}


std::string OVMBin2::getStatusString()
{
    static char buff[1024];
    double
            score = m_outReg[OP_SCORE],
            fuel = m_outReg[OP_FUEL],
            sx = m_outReg[OP_SPACE_X],
            sy = m_outReg[OP_SPACE_Y],
            sxt = m_outReg[OP_TARGET_X],
            syt = m_outReg[OP_TARGET_Y];
    double radiusCurrent = sqrt(sx*sx + sy*sy);

    double syt_ = sy-syt, sxt_ = sx - sxt;
    double distance = sqrt(pow(sx-sxt_,2)+pow(sy-syt_,2));
    double radiusCurrentTarget = sqrt(sxt_*sxt_ + syt_*syt_);
    sprintf(buff, "Step: %4d Score: %4.1f Fuel: %4.1f sx= %8.1f sy= %8.1f sxt= %8.1f syt= %8.1f sr = %8.1f srt = %8.1f distance = %s%.1f\n",
         m_count,
         score,
         fuel,
         sx,
         sy,
         sxt_,
         syt_,
         radiusCurrent,
         radiusCurrentTarget,
         (asin(sy/radiusCurrent) + 2*M_PI) > (asin(syt_/radiusCurrentTarget) + 2*M_PI )? "-":"+",
         distance);
    return std::string(buff);
}
